package _ppt_test;

import java.util.Arrays;
import java.util.Random;

/*
    对一个随机生成的int型数组（大小为10，范围为1-100），
    完成以下工作：找到该数组的最大值；找到该数组的最小值；计算数组中所有数的和值；计算数组中所有数的平均值；
    对该数组进行冒泡排序；对该数组进行选择排序。
 */
import java.util.Random;                                  // 导入Random类，用于生成随机数
import java.util.Arrays;                                  // 导入Arrays类，用于数组操作

public class demo03 {                                     // 定义一个名为demo03的类
    public static void main(String[] args) {              // 主方法，程序入口
        Random rand = new Random();                       // 创建Random对象，用于生成随机数
        int randNum;                                      // 定义一个变量，用于存储随机数
        int[] arr = new int[10];                          // 创建一个大小为10的整数数组
        for (int i = 0; i < arr.length; i++) {            // 遍历数组
            randNum = rand.nextInt(100) + 1;              // 生成1-100之间的随机数
            arr[i] = randNum;                             // 将随机数存入数组
        }
        System.out.println("生成的数组为：" + Arrays.toString(arr));  // 输出生成的数组

        demo03 demo03 = new demo03();                     // 创建demo03对象
        demo03.getMax_Min_Sum_Avg(arr);                   // 调用方法计算最大值、最小值、和值和平均值
        demo03.bubbleSort(arr);                           // 调用方法进行冒泡排序
        demo03.selectionSort(arr);                        // 调用方法进行选择排序
    }

    // 计算最大值、最小值、和值和平均值的方法
    public void getMax_Min_Sum_Avg(int[] arr) {           // 接收一个整数数组作为参数
        if (arr.length == 0) {                            // 检查数组是否为空
            System.out.println("数组为空");                // 如果数组为空，输出提示信息
        }
        int max = arr[0], min = arr[0], sum = 0, avg = 0; // 初始化最大值、最小值、和值和平均值
        for (int item : arr) {                            // 遍历数组
            sum += item;                                  // 累加数组元素
            avg = sum / arr.length;                       // 计算平均值
            if (item > max) {                             // 如果当前元素大于最大值
                max = item;                               // 更新最大值
            } else if (item < min) {                      // 如果当前元素小于最小值
                min = item;                               // 更新最小值
            }
        }
        System.out.println("最大的数为：" + max);          // 输出最大值
        System.out.println("最小的数为：" + min);          // 输出最小值
        System.out.println("所有数的和为：" + sum);        // 输出和值
        System.out.println("所有数的平均值为：" + avg);    // 输出平均值
    }

    // 冒泡排序的方法
    public void bubbleSort(int[] arr) {                   // 接收一个整数数组作为参数
        if (arr.length == 0) {                            // 检查数组是否为空
            System.out.println("数组为空");                // 如果数组为空，输出提示信息
        }
        int temp;                                         // 定义一个临时变量，用于交换元素
        for (int i = 0; i < arr.length - 1; i++) {        // 外层循环控制轮数
            for (int j = 0; j < arr.length - i - 1; j++) {// 内层循环控制比较
                if (arr[j] > arr[j + 1]) {                // 如果前一个元素大于后一个元素
                    temp = arr[j];                        // 交换元素
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        System.out.println("冒泡排序后的数组：" + Arrays.toString(arr));  // 输出冒泡排序后的数组
    }

    // 选择排序的方法
    public void selectionSort(int[] arr) {                // 接收一个整数数组作为参数
        if (arr.length == 0) {                            // 检查数组是否为空
            System.out.println("数组长度为0");             // 如果数组为空，输出提示信息
        }

        for (int i = 0; i < arr.length; i++) {            // 外层循环控制轮数
            int minIndex = i;                             // 假设当前索引为最小值索引
            for (int j = i; j < arr.length; j++) {        // 内层循环查找最小值索引
                if (arr[minIndex] > arr[j]) {             // 如果找到更小的值
                    minIndex = j;                         // 更新最小值索引
                }
            }
            int temp = arr[minIndex];                     // 交换元素
            arr[minIndex] = arr[i];
            arr[i] = temp;
        }
        System.out.println("选择排序后的数组：" + Arrays.toString(arr));  // 输出选择排序后的数组
    }
}
